package demo;

import com.simple.annotation.Inject;
import com.simple.annotation.Instance;
import com.simple.annotation.Observer;
import com.simple.core.Carrier;
import com.simple.core.Sender;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Instance
public class Message {

    @Inject
    private Sender sender;

    public void message() {
        Map<String, Object> map = new HashMap();
        map.put(Constant.DEMO_KEY, "测试通信是否成功");
        List<Object> send = send(map);
        System.out.println(send);
        Carrier carrier = new Carrier(Constant.DEMO_ACTION);
        carrier.addData(Constant.DEMO_KEY, "测试通信是否成功");
        send = send(carrier);
        System.out.println(send);
    }

    /**
     * 相当于一个锚点，只需要空实现即可，使用Observer注解增强后即可自动实现发送功能，当参数是Map时，Observer注解的value中，必须携带action信息
     *
     * @param map 被发送的数据，数据的泛型必须是key是String，value是Object
     * @param <T> 返回结果的类型
     * @return 返回处理后的结果
     */
    @Observer("demo_action")
    public <T> T send(Map<String, Object> map) {
        return null;
    }

    /**
     * 相当于一个锚点，只需要空实现即可，使用Observer注解增强后即可自动实现发送功能，当参数时Carrier时，只需要Observer注解标记一下方法即可实现信息的传递
     *
     * @param carrier 数据载体
     * @param <T>     返回结果的类型
     * @return 返回处理后的结果
     */
    @Observer
    public <T> T send(Carrier carrier) {
        return null;
    }
}
